package user

import (
	"Project/global"
	"Project/model/common/response"
	"Project/model/user/request"
	"Project/utils"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
)

type UserSaleApi struct{}

// AddUserSale 添加一个销售人员
func (u *UserSaleApi) AddUserSale(c *gin.Context) {
	// 获取用户信息
	var userInfo request.UserPersonInfo
	err := c.ShouldBind(&userInfo)
	global.GVA_LOG.Debug("c.ShouldBind", zap.Any("userSale", userInfo))
	if err != nil {
		response.FailWithMessage("参数错误", c)
		return
	}
	// 获取当前销售人员id
	saleId := utils.GetUserID(c)
	// 创建
	if err = userSaleServie.AddUserSale(saleId, userInfo); err != nil {
		global.GVA_LOG.Error("AddUserSale err", zap.Error(err))
		response.Fail(c)
		return
	}
	// 响应
	response.Ok(c)
	return
}

// DeleteUserSale 删除一个销售人员
func (u *UserSaleApi) DeleteUserSale(c *gin.Context) {
	// 获得要删除销售人员id
	saleId := c.Param("sale_id")
	if saleId == "" {
		response.FailWithMessage("传入的id为空", c)
		return
	}
	// 根据销售人员id删除该用户
	err := userSaleServie.DeleteUserSale(saleId)
	if err != nil {
		response.Fail(c)
		return
	}
	response.Ok(c)
}

// UpdateUserSale 更新销售人员信息
func (u *UserSaleApi) UpdateUserSale(c *gin.Context) {
	// 获取所有更新的字段
	var userInfo request.UpdateInfo
	err := c.ShouldBindJSON(&userInfo)
	global.GVA_LOG.Debug("c.ShouldBind", zap.Any("userSale", userInfo))
	if err != nil {
		global.GVA_LOG.Error("c.ShouldBind", zap.Error(err))
		response.FailWithMessage("传入字段有误", c)
		return
	}
	// 更新
	if err = userSaleServie.UpdateUserSale(userInfo); err != nil {
		global.GVA_LOG.Error("UpdateUserSale err", zap.Error(err))
		response.Fail(c)
		return
	}
	response.Ok(c)
	return
}

//GetUserSale 用户获取所在药店中所有人员信息
func (u *UserSaleApi) GetUserSale(c *gin.Context) {
	// 获取用户id
	userID := utils.GetUserID(c)
	// 获取用户所在药店id
	shopId, err := userSaleServie.GetShopIdBySaleId(userID)
	global.GVA_LOG.Debug("shop_id", zap.Int64("shop_id", shopId))
	if err != nil {
		response.Fail(c)
		global.GVA_LOG.Error("GetShopIdBySaleId err", zap.Error(err))
		return
	}
	// 根据药店id获取该药店所有销售人员
	list, err := userSaleServie.GetAllUserSaleByShopId(shopId)
	if err != nil {
		global.GVA_LOG.Error("GetAllUserSaleByShopId err", zap.Error(err))
		response.Fail(c)
		return
	}
	response.OkWithData(list, c)
}

// GetPersonInfo 获取个人信息
func (u *UserSaleApi) GetPersonInfo(c *gin.Context) {
	// 获取用户id
	saleId := utils.GetUserID(c)
	var salePersonalInfo request.SalePersonalInfo
	// 根据用户id查个人信息
	err := userSaleServie.GetById(saleId, &salePersonalInfo)
	if err != nil {
		response.Fail(c)
		global.GVA_LOG.Error("GetById err", zap.Error(err))
		return
	}
	response.OkWithData(salePersonalInfo, c)
	return
}

//UpdatePersonInfo 更新个人信息
func (u *UserSaleApi) UpdatePersonInfo(c *gin.Context) {
	// 获取更新的个人信息
	personalInfo := request.SalePersonalInfo{}
	err := c.ShouldBind(&personalInfo)
	if err != nil {
		response.FailWithMessage("参数错误", c)
		return
	}
	// 更新数据
	err = userSaleServie.UpdateUserSalePersonalInfo(&personalInfo)
	if err != nil {
		response.Fail(c)
		return
	}
	response.Ok(c)
}

//UpdatePassword 修改密码
func (u *UserSaleApi) UpdatePassword(c *gin.Context) {
	// 获取用户id
	saleId := utils.GetUserID(c)
	// 绑定密码信息
	var password request.PasswordInfo
	err := c.ShouldBind(&password)
	if err != nil {
		global.GVA_LOG.Error("修改信息失败", zap.Error(err))
		response.FailWithMessage("参数错误", c)
		return
	}
	// 验证并更新密码
	if err = userSaleServie.UpdatePassword(saleId, password); err != nil {
		global.GVA_LOG.Error("修改信息失败", zap.Error(err))
		response.FailWithMessage("修改信息失败", c)
		return
	}
	response.Ok(c)
}
